package entitys;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;

@Entity
public class Cotizacion implements Serializable{	
    private static final long serialVersionUID = 1L;
    private int idCotizacion;
    private Date fechaEmision;
    private Date fechaVencimiento;
    private double precioTotal;
    private List<ItemCotizacion> itemsCotizacion;
    private SolicitudCotizacion solicitudCotizacion;
    
    public Cotizacion() {
		super();
		// TODO Auto-generated constructor stub
	}

	@Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name = "idCotizacion", nullable = false)
    public int getIdCotizacion() {
            return idCotizacion;
    }

    public void setIdCotizacion(int idCotizacion) {
            this.idCotizacion = idCotizacion;
    }

    @Column(name = "fechaEmision", nullable = false)
    public Date getFechaEmision() {
            return fechaEmision;
    }

    public void setFechaEmision(Date fechaEmision) {
            this.fechaEmision = fechaEmision;
    }

    @Column(name = "fechaVencimiento", nullable = false)
    public Date getFechaVencimiento() {
            return fechaVencimiento;
    }

    public void setFechaVencimiento(Date fechaVencimiento) {
            this.fechaVencimiento = fechaVencimiento;
    }

    @OneToMany(cascade=CascadeType.ALL)
    @LazyCollection(LazyCollectionOption.FALSE)
    @JoinColumn(name = "idCotizacion")
    public List<ItemCotizacion> getItemsCotizacion() {
            return itemsCotizacion;
    }

    public void setItemsCotizacion(List<ItemCotizacion> itemsCotizacion) {
            this.itemsCotizacion = itemsCotizacion;
    }

    public void setPrecioTotal(double precioTotal) {
            this.precioTotal = precioTotal;
    }

    public double getPrecioTotal() {
            return precioTotal;
    }
	
	public void setFechaEmision() {
		Calendar cal = Calendar.getInstance();
		this.setFechaEmision(cal.getTime());
	}
	
	public void setFechaVencimiento() {
		Calendar calendar = Calendar.getInstance();
		calendar.add(Calendar.DAY_OF_MONTH,30);
		this.setFechaVencimiento(calendar.getTime());
	}
	
	@OneToOne(mappedBy="cotizacion")
	public SolicitudCotizacion getSolicitudCotizacion() {
		return solicitudCotizacion;
	}

	public void setSolicitudCotizacion(SolicitudCotizacion solicitudCotizacion) {
		this.solicitudCotizacion = solicitudCotizacion;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + idCotizacion;
		return result;
	}
	
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Cotizacion other = (Cotizacion) obj;
		if (idCotizacion != other.idCotizacion)
			return false;
		return true;
	}
}
